# coding:utf-8

import re

'''
a, X, 9, < -- ordinary characters just match themselves exactly.
The meta-characters which do not match themselves because they have special
 meanings are: . ^ $ * + ? { [ ] \ | ( ) (details below)
. (a period) -- matches any single character except newline '\n'
\w -- (lowercase w) matches a "word" character: a letter or digit or
underbar [a-zA-Z0-9_]. Note that although "word" is the mnemonic for
this, it only matches a single word char, not a whole word. \W (upper case W)
matches any non-word character.
\b -- boundary between word and non-word
\s -- (lowercase s) matches a single whitespace character --
space, newline, return, tab, form [ \n\r\t\f]. \S (upper case S)
matches any non-whitespace character.
\t, \n, \r -- tab, newline, return
\d -- decimal digit [0-9] (some older regex utilities do not
support but \d, but they all support \w and \s)
^ = start, $ = end -- match the start or end of the string
\ -- inhibit the "specialness" of a character. So, for example, use \.
to match a period or \\ to match a slash. If you are unsure if a
character has special meaning, such as '@', you can put a slash in front
of it, \@, to make sure it is treated just as a character.
'''
def re_search(rule,str):
    match = re.search(rule,str)
    if match:
        match = match.group()
    return match

if __name__ == '__main__':
    print re_search(r'iii','piiig')
    print re_search(r'\d\s*\d\s*\d', 'xx1 2   3xx')
    print re_search(r'([\w.-]+)@([\w.-]+)',"print match.group()  ## 'alice-b@google.com'")